art: Support PackGoodsInfo inventory and has_sale_num related

FFIB 5 年之前
父节点
当前提交
8cb1966a10
共有 4 个文件被更改,包括 43 次插入2 次删除
  1. 23 0
      goods/migrations/0005_auto_20200422_1818.py
  2. 6 1
      goods/models.py
  3. 12 1
      pay/views.py
  4. 2 0
      utils/error/errno_utils.py

+ 23 - 0
goods/migrations/0005_auto_20200422_1818.py

@@ -0,0 +1,23 @@
1
+# Generated by Django 2.2.12 on 2020-04-22 10:18
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('goods', '0004_auto_20200422_1216'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='packgoodsinfo',
15
+            name='has_sale_num',
16
+            field=models.IntegerField(default=0, help_text='已购数量', verbose_name='has_sale_num'),
17
+        ),
18
+        migrations.AddField(
19
+            model_name='packgoodsinfo',
20
+            name='inventory',
21
+            field=models.IntegerField(default=0, help_text='库存数量', verbose_name='inventory'),
22
+        ),
23
+    ]

+ 6 - 1
goods/models.py

@@ -71,6 +71,8 @@ class PackInfo(BaseModelMixin):
71 71
 class PackGoodsInfo(BaseModelMixin):
72 72
     pack_id = models.CharField(_('pack_id'), max_length=32, blank=True, null=True, help_text='包唯一标识', db_index=True)
73 73
     good_id = models.CharField(_('good_id'), max_length=32, blank=True, null=True, help_text='商品唯一标识', db_index=True)
74
+    inventory = models.IntegerField(_('inventory'), default=0, help_text='库存数量')
75
+    has_sale_num = models.IntegerField(_('has_sale_num'), default=0, help_text='已购数量')
74 76
 
75 77
     class Meta:
76 78
         verbose_name = _('包-商品信息')
@@ -85,7 +87,10 @@ class PackGoodsInfo(BaseModelMixin):
85 87
             good = GoodsInfo.objects.get(good_id=self.good_id)
86 88
         except GoodsInfo.DoesNotExist:
87 89
             good = {}
88
-        return good.data
90
+        
91
+        data = good.data
92
+        data.update({'inventory': self.inventory, 'has_sale_num': self.has_sale_num})
93
+        return data
89 94
 
90 95
 
91 96
 class PackGoodsSaleInfo(BaseModelMixin):

+ 12 - 1
pay/views.py

@@ -61,7 +61,9 @@ def wx_order_create_api(request):
61 61
     # 包-商品校验
62 62
     for g in goods_info:
63 63
         try:
64
-            PackGoodsInfo.objects.get(pack_id=pack_id, good_id=g.get('good_id', ''))
64
+            good = PackGoodsInfo.objects.get(pack_id=pack_id, good_id=g.get('good_id', ''))
65
+            if good.inventory - g.get('num', 0) <= 0:
66
+                return response(PackGoodsStatusCode.PACK_GOODS_INVENTORY_SHORTAGE)
65 67
         except PackGoodsInfo.DoesNotExist:
66 68
             return response(PackGoodsStatusCode.PACK_GOODS_NOT_FOUND)
67 69
 
@@ -142,6 +144,15 @@ def order_paid_success(order):
142 144
         saleinfo=order.goods_info
143 145
     )
144 146
 
147
+    for g in order.goods_info:
148
+        try:
149
+            good = PackGoodsInfo.objects.get(pack_id=pack_id, good_id=g.get('good_id', ''))
150
+            good.has_sale_num += 1
151
+            good.inventory -= 1
152
+            good.save()
153
+        except PackGoodsInfo.DoesNotExist:
154
+            continue
155
+
145 156
 
146 157
 def order_paid_fail(order):
147 158
     if order.pay_status == OrderInfo.FAIL:

+ 2 - 0
utils/error/errno_utils.py

@@ -34,6 +34,8 @@ class PackStatusCode(BaseStatusCode):
34 34
 
35 35
 class PackGoodsStatusCode(BaseStatusCode):
36 36
     PACK_GOODS_NOT_FOUND = StatusCodeField(403001, 'Pack Goods Not Found', description=u'包商品不存在')
37
+    PACK_GOODS_INVENTORY_SHORTAGE = StatusCodeField(403002, 'Pack Goods Inventory Shortage', description=u'库存不足')
38
+
37 39
 
38 40
 
39 41
 class OrderStatusCode(BaseStatusCode):